<?php

namespace Drinkiit\BlogBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\HttpFoundation\Response;
use Drinkiit\BlogBundle\Controller\Mobile_Detect;
use Drinkiit\BlogBundle\Form\ClientSpontannesType;
use Drinkiit\BlogBundle\Handler\DefaultHandler;
use Drinkiit\UtilisateurBundle\Entity\UtilisateurApp;

class IndexController extends Controller
{
	
	private $session ;
	
	private $user ;
	
	public function construct() {
		$this->session = $this->getRequest()->getSession(); // on ouvre la session
		$this->user = $this->get('security.context')->getToken()->getUser() ; // on récupère l'utilisateur actif
	}
	
	public function em($objet) {
		return $this->getDoctrine()->getEntityManager()->getRepository($objet) ;
	}
	
	public function changeAction()
	{
		$this->construct() ;
		if ( !$this->session->has('mobile') )
		{
			$this->session->set('mobile', true) ;
		}
		
		if ( $this->session->get('mobile') )
		{
			$this->session->set('mobile', false) ;
		} else {
			$this->session->set('mobile', true) ;
		}
		return $this->indexAction() ;
	}
	
    public function indexAction()
    {
		$this->construct() ;
		if ( false )
		{
			$detect = new Mobile_Detect();
			
			if ( $detect->isMobile() ) {
				$this->session->set('mobile', true) ;
			} elseif ( $detect->isTablet() ) {
				$this->session->set('mobile', true) ;
			} else {
				$this->session->set('mobile', false) ;
			}
		}
		
		if ( $this->get('security.context')->isGranted('ROLE_ADMIN') )
		{
			return $this->redirect( $this->generateUrl('admin_index'));
		}
		if ( $this->get('security.context')->isGranted('ROLE_USER') )
		{
			return $this->redirect( $this->generateUrl('member_index'));
		}
		
        return $this->render('DrinkiitBlogBundle:Visitor:Index.html.twig', array(
			'titre' => 'Drinkiit -- vous souhaite la bienvenue !!!',
		));
    }
    
    public function user_connectedAction()
    {
		$this->construct() ;
		$commande = $this->em('DrinkiitBlogBundle:Commande')->find($this->session->get('panier')) ; // on récupère la commande
		if ( $this->session->has('panier') and is_object($commande) )
		{
			$this->get('logger')->info("[INFO] On a la commande n° ".$this->session->get('panier')." en cours.") ;
			//echo $this->session->get('panier') ; // le numéro de la commande en cours
			
			$liste_article = $commande->getArticleCommande() ;
		} else {
			$this->session->remove('panier') ;
			$this->get('logger')->info("[INFO] On a pas de commande en cours.") ;
			$liste_article = Array() ;
		}
		
		if ( $this->session->get('mobile') )
		{
			return $this->render('DrinkiitBlogBundle:Includes:mon_compte_mobile.html.twig', array(
				'panier' => $liste_article,
				'commande' => $commande,
			));
		} else {
			return $this->render('DrinkiitBlogBundle:Includes:mon_compte.html.twig', array(
				'panier' => $liste_article,
				'commande' => $commande,
			));
		}
    }
    
    public function navAction()
    {
        return $this->render('DrinkiitBlogBundle:Includes:nav.html.twig');
    }
    
    public function suiveurAction()
    {
		//echo $uri = $_SERVER['REQUEST_URI'] ;
		/*$links = Array() ;
		$hrefs = Array() ;
		foreach( explode('/', $_SERVER['PATH_INFO']) as $key => $val) {
			if ( !empty($val) )
			{
				$links[] = $val ;
				$hrefs[$val] = $this->parse($val) ;
			}
		}
		*/
        return $this->render('DrinkiitBlogBundle:Includes:suiveur.html.twig', array(
			//'links' => $links,
			//'hrefs' => $hrefs,
		));
    }
    
    public function menuAction()
    {
		$factory = $this->get('security.encoder_factory');
		$num = count($this->em('Drinkiit\UtilisateurBundle\Entity\UtilisateurApp')->findAll()) ;
		$client_spon = new UtilisateurApp();
		$client_spon->setUsername('visiteur'.$num) ;
		$client_spon->setUsernameCanonical('visiteur'.$num) ;
		$client_spon->setEmail("anonymous$num.webmaster@gmail.com") ;
		$client_spon->setEmailCanonical("anonymous$num.webmaster@gmail.com") ;
			$encoder = $factory->getEncoder($client_spon) ;
		$client_spon->setPassword($encoder->encodePassword('motdepasse', $client_spon->getSalt())) ;
        $client_spon->addRole('ROLE_USER') ;
        $client_spon->setEnabled(true) ;
        
		$form = $this->createForm(new ClientSpontannesType, $client_spon);
		
        $formHandler = new DefaultHandler($form, $this->get('request'), $this, $this->getDoctrine()->getEntityManager());
		
        if( $formHandler->process() )
        {
			// puis on affecte directement le client à maintenant
			$this->container->get('security.context')->setToken(
				new UsernamePasswordToken(
					$client_spon, null, 'main', $client_spon->getRoles())
				);
			$this->get('logger')->info("[INFO] Formulaire bien validé, d'ou la redirection [member_commande]") ;
            return $this->redirect( $this->generateUrl('member_commande', array('notification' => 'Votre mot de passe est pour l\'instant : motdepasse')) );
        }
		
		$liste_type_produit = $this->em('DrinkiitBlogBundle:Type_produit')->findAll() ;
		
		// si un type de produit n'a pas encore de produit, on va pas l'ajouter...
		foreach($liste_type_produit as $key => $type_produit) {
			if (count($type_produit->getProduit()) == 0) {
				unset($liste_type_produit[$key]) ;
			}
		}
		
		$this->get('logger')->info("[INFO] Liste de type produit à ".count($liste_type_produit)." éléments.") ;
		return $this->render('DrinkiitBlogBundle:Visitor:Commande.html.twig', array(
			'titre' => 'Le menu',
			'liste' => $liste_type_produit,
			'form' => $form->createview(),
		));
    }
    
    public function sitemapAction()
    {
		return $this->render('DrinkiitBlogBundle:Includes:sitemap.html.twig');
    }
}
